package main

import (
	"encoding/base64"
	"fmt"
	"log"

	"fabric_sdk/info"
	"fabric_sdk/sdkInit"
	"fabric_sdk/service"

	"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
)

func org1Start(sdk *fabsdk.FabricSDK) {

	fmt.Println("开始Org1.......")
	//创建Org1通道
	err := sdkInit.CreateChannel(sdk)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	if !info.Initialized {
		//Org1加入通道
		err = sdkInit.PeerJoinChannel(sdk, info.Org1Name)
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		//安装链码
		err = sdkInit.InstallCC()
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		//实例化链码
		err = sdkInit.InstantiateCC()
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		info.Initialized = !info.Initialized
	}
}

func main() {

	//初始化SDK
	sdk, err := sdkInit.SetupSDK()
	if err != nil {
		fmt.Printf(err.Error())
		return
	}
	defer sdk.Close()

	org1Start(sdk)

	channelClient, err := sdkInit.CreatChannelClient(sdk)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(channelClient)
	info.Client = channelClient

	//  kv 数据存储合约
	msg, err := service.Query("1234")
	if err != nil {
		msg = "没有查询到对应的信息"
		fmt.Println(msg)
	} else {
		// 进行base64解码
		decodeBytes, err := base64.StdEncoding.DecodeString(msg)
		if err != nil {
			log.Fatalln(err)
		}
		fmt.Println("查询成功：" + string(decodeBytes))
	}

	//base64编码
	encodeString := base64.StdEncoding.EncodeToString([]byte("test"))
	msg, err = service.AddKvStore("1234", encodeString)

	if err != nil {
		msg = err.Error()
		fmt.Println(msg)
	} else {
		fmt.Println("提交成功，tx: " + msg)
	}

	msglist, err := service.GetKvStoreHistory("1234")
	if err != nil {
		// msgh := "没有查询到对应的信息"
		fmt.Println(err)
	} else {

		for _, v := range msglist {
			// 进行base64解码
			decodeBytes, err := base64.StdEncoding.DecodeString(v)
			if err != nil {
				log.Fatalln(err)
			}
			fmt.Println("History::" + string(decodeBytes))
		}

	}

	msg, err := service.Query("A")
	if err != nil {
		msg = "没有查询到对应的信息"
		fmt.Println(msg)
	} else {
		fmt.Println("A 资产为：" + msg)
	}

	// query 合约调用
	// msg, err = service.Transfer("A", "B", "10")
	// if err != nil {
	// 	msg = err.Error()
	// 	fmt.Println(msg)
	// } else {
	// 	fmt.Println("交易成功，tx: " + msg)
	// }

	// msg, err = service.Query("A")
	// if err != nil {
	// 	msg = "没有查询到对应的信息"
	// 	fmt.Println(msg)
	// } else {
	// 	fmt.Println("A 资产为：" + msg)
	// }

	// msg, err = service.Register("C", "300")
	// if err != nil {
	// 	msg = err.Error()
	// 	fmt.Println(msg)
	// } else {
	// 	fmt.Println("注册成功，tx: " + msg)
	// }

	// msg, err = service.Delete("A")
	// if err != nil {
	// 	msg = err.Error()
	// 	fmt.Println(msg)
	// } else {
	// 	fmt.Println("注销成功，tx: " + msg)
	// }
}
